#include <iostream>

class Base {
  virtual void foo() = 0;
  virtual void bar();
  virtual void foobar() = 0;
};

void Base::bar() {}

class Derived1 : public Base {
  // 使用 override 关键字指明派生类重写了虚函数
  virtual void foo() override = 0;
  virtual void bar() override {}
  virtual void foobar() override {}
};

class Derived2 : public Derived1 {
  // 使用 final 禁止派生类重写虚函数
  virtual void foo() override final {}
};

// 在类声明的类名后面加上 final 关键字，表示该类不能被继承
class Derived3 final : public Derived1 {
  virtual void foo() override {}
};

int main(int argc, char *argv[]) {
  std::cout << "==== ch01 p07 ====" << std::endl;
  return 0;
}
